package main

import (
	"fmt"
	"go-xorm-01/utils"
	"time"
)

// 获取数据库信息 ：https://xorm.io/zh/docs/chapter-03/1.metas/
// 表结构操作
// xorm 提供了一些动态获取和修改表结构的方法，通过这些方法可以动态同步数据库结构，导出数据库结构，导入数据库结构。
//
// 获取数据库信息
// DBMetas()
// xorm支持获取表结构信息，通过调用 engine.DBMetas() 可以获取到数据库中所有的表，字段，索引的信息。
//
// TableInfo()
// 根据传入的结构体指针及其对应的Tag，提取出模型对应的表结构信息。这里不是数据库当前的表结构信息，而是我们通过struct建模时希望数据库的表的结构信息
func main() {
	engine := utils.GenerateEngine()
	defer engine.Close()
	metas, err := engine.DBMetas()
	if err != nil {
		panic(err)
	}
	for i, meta := range metas {
		fmt.Printf("数据库表%d: %s \n", i, meta.Name)
	}
	info, err := engine.TableInfo(new(UserSnake))
	if err != nil {
		panic(err)
	}
	fmt.Println("UserSnake~对应的表结构:")
	for _, col := range info.Columns() {
		println(fmt.Sprintf("数据库字段名： %s 结构体字段名： %s", col.Name, col.FieldName))

	}

}

// UserSnake
// @Description: UserSnake
type UserSnake struct {
	Id            int64 `xorm:"id"` //指定列名 ，默认id
	Username      string
	Password      string
	RegisterTime  time.Time
	LastLoginTime time.Time
}

// TableName
//
//	@Description: 指定表名：默认为:user_snake
//	@receiver u
//	@return string
func (u UserSnake) TableName() string {
	return "user_snake"
}
